/**
 * 使用之前:
 *        # 1. 全局安装 yarn global add yo
 *        # 2. 使用generator-node,安装 yarn global add generator-node
 *  
 * 注意事项: generator目录,查看此项目文件目录, generator名字 generator-<name>
 * 
 * 
 * 此文件作为generator的核心入口
 * 需要导出一个继承自 yeoman generator的类型
 * yeoman generator 在工作时会自动调用我们在此类型中定义的一些生命周期方法
 * 我们在这些方法中通过调用父类提供的一些工具方法实现一些功能, 例如文件写入
 * 最后通过yarn link到全局,然后通过yo <name>到指定的文件夹就可以了,<name>指的是项目文件generator-<name>的name
 */

 const Generator = require('yeoman-generator');

 module.exports = class extends Generator {

     /** 发起命令行询问 */
     prompting () {
         //Yeoman 在询问用户环节会自动调用此方法
         //在此方法可以调用父类的prompt() 方法发出对用户的命令行询问
         //此方法返回一个promise
         return this.prompt([
             {
               type: 'input',  //使用用户输入的方式
               name: 'name',
               message: 'your project name',
               default: this.appname  //appname 为项目生成目录名称
             },
         ]).then(answers => {
             //answer: 用户输出的结果
             this.answers = answers
         })
     }



     writing () {
         //yeoman 自动生成文件阶段调用此方法
         //尝试往项目目录中写入文件
        //  this.fs.write(
        //    this.destinationPath('temp.txt'),
        //    Math.random().toString()
        //  )

        

        //通过模板方式写入文件到目标目录

        // //模板文件路径
        // const tmpl = this.templatePath('foo.txt')
        // //输出目标路径
        // const output = this.destinationPath('foo.txt')
        // //模板数据上下文
        // const context = { title: 'hello world', success: true }
        // //fs.copyTpl: 把模板文件自动映射到输出文件上
        // this.fs.copyTpl(tmpl, output, context)
        
        
        const tmpl = this.templatePath('bar.html')
        const output = this.destinationPath('bar.html')
        const context = this.answers
        this.fs.copyTpl(tmpl, output, context)





     }
 }